#ifndef NUMERICBINARYOP_H
#define NUMERICBINARYOP_H
#include "numericExpression.h"
#include <string>

/*Class: NumericBinaryOperation
 *	A Class that represents a binary operation for Numeric Expressions as products or additions
 *See Also: <NumericExpression> <Expression>
 */
class NumericBinaryOperation: public NumericExpression {

protected:
	 /* Variable leftOperand:
	  *	the left operand of the binary expression
	  */
	 Expression * leftOperand;
	 /* Variable rightOperand:
	  *	the right operand of the binary expression
	  */
	 Expression * rightOperand;
	 /* Variable operatorRepresentation:
	  * 	String representation of the operator
	  */
	 std::string operatorRepresentation;
public:
	/*Constructor:NumericBinaryOperation
	 * Initialize the object with the specified parameters.
	 * Parameters:
	 * 	leftExpression - The left numeric expression of the operation.
	 * 	opRep	- The string representation of the operator.
	 * 	rightExpression - The right numeric expresion of the operation.
	 */
	NumericBinaryOperation(Expression * leftExpresion = NULL, std::string opRep = "", Expression * rightExpression = NULL);

	NumericBinaryOperation(const NumericBinaryOperation & other);

	virtual ~NumericBinaryOperation();

	virtual Expression * clone();

	std::string toString();

    Expression * getLeftExpression();

    Expression * getRightExpression();

    void setLeftExpression(Expression * expression);

    void setRightExpression(Expression * expression);

    void setOperator(const std::string & opRep);

	std::string getOperator();
};
#endif
